package Hash$Set;

import java.util.HashMap;
import java.util.Map;

/**
 * 两数之和：给定一个数组和一个目标数，在数组中找到两个数，使得它们的加和等于目标数，并返回这两个数的下标
 * 边遍历数组，边判断当前元素和之前已遍历的元素，是否能相加等于目标数
 * 通过构建哈希Map，key 存储元素值，value存储元素下标
 */
public class TwoSum {
    public int[] twoSum(int[] nums, int target) {
        // 构建哈希Map，key 存储元素值，value存储元素下标
        Map<Integer, Integer> hashMap = new HashMap<>();
        hashMap.put(nums[0], 0);
        for (int i = 1; i < nums.length; i++){
            Integer diff = target - nums[i];
            if (hashMap.containsKey(diff)){
                return new int[] {i, hashMap.get(diff)};
            } else {
                hashMap.put(nums[i], i);
            }
        }
        return null;
    }
}
